package com.crm.system.service.productManager;

import com.crm.common.model.DhPageInfo;
import com.crm.model.entity.productManager.CustomerProduct;
import com.crm.model.qo.productManager.CustomerProductQO;
import com.crm.model.qo.productManager.CustomerProductUpdateQO;
import com.crm.model.vo.productManager.AnalyseFinishOrderProductVO;
import com.crm.model.vo.productManager.CustomerProductUpdateVO;
import com.crm.model.vo.productManager.CustomerProductVO;
import com.crm.model.vo.productManager.ProductAnalyseVO;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Author yincuimei
 * @Date 2021/1/27 15:38
 * 产品管理
 */
public interface CustomerProductService {

    /**
     * 产品管理--非会员产品列表分页信息
     * @param customerProductQO    ---产品列表查询参数
     * @param pageIndex/ pageSize  ---页码、分页大小
     * @param sortName/sortOrder   ---产品列表排序字段及规则
     * @return
     */
   DhPageInfo<CustomerProductVO> selectCustomerProductVOList(CustomerProductQO customerProductQO, Integer pageIndex, Integer pageSize, String sortName, String sortOrder,Integer tag);

   DhPageInfo<Map<String,Object>> selectCustomerProductVOListForCoupon(CustomerProductQO customerProductQO, Integer pageIndex, Integer pageSize, String sortName, String sortOrder, Integer tag);

 /**
    * 产品管理--根据产品ID和删除状态查询产品信息(产品编辑)
    * @param customerProductId  ---产品ID
    * @return
    */
   CustomerProductUpdateVO selectCustomerProductUpdateVOById(String customerProductId);

    /**
     * 产品管理--产品列表(上/下架操作)
     * @param customerProductId   ---产品主键
     * @param shelfStatus         ---上/下架标识(0-待定；1-已上架； 2-已下架)
     * @return
     */
    Boolean updateCustomerProductShelfStatus(String customerProductId,String shelfStatus);

    /**
     * 产品管理--查询产品名称是否已存在
     * @param productName   ---产品名称
     * @return
     */
    Boolean isExistProductName(String productName);

    /**
     * 产品管理--查询产品编码是否已存在
     * @param productCode   ---产品编码
     * @return
     */
    Boolean isExistProductCode(String productCode);

    /**
     * 产品管理--查询专题ID是否已存在
     * @param topicId  ---专题ID
     * @return
     */
    Boolean isExistTopicId(Integer topicId);

    /**
     * 产品管理--新增产品
     * @param customerProduct  ---产品信息
     * @return
     */
    Boolean insertCustomerProduct(CustomerProduct customerProduct);

    /**
     * 产品管理--编辑产品
     * @param customerProductUpdateQO  ---产品编辑信息
     * @return
     */
    Boolean updateCustomerProductById(CustomerProductUpdateQO customerProductUpdateQO);

    /**
     * 查询产品下拉框列表
     * @return
     */
    List<HashMap> selectProductDropDownList(String productName);

    /**
     * 商机-新增商机-查询所有产品列表
     * @param pageIndex 页码
     * @param pageSize 分页大小
     * @param sortName 排序列名字
     * @param sortOrder 排序规则
     * @param productName 产品名称
     * @return
     */
    DhPageInfo<CustomerProduct> productList(Integer pageIndex,Integer pageSize,String sortName,String sortOrder,String productName,String productCategories);

    /**
     * 产品分析
     * @param dateType
     * @return
     */
    ProductAnalyseVO selectProductAnalyse(String dateType);


    /**
     * 产品分析
     * @param dateType
     * @return
     */
    ProductAnalyseVO selectProductAnalyse(String dateType, String accountId);

    /**
     * 订单完成的产品列表统计
     * @param pageIndex
     * @param pageSize
     * @param sortName
     * @param sortOrder
     * @param dateType
     * @return
     */
    DhPageInfo<AnalyseFinishOrderProductVO> selectFinishOrderProductList(Integer pageIndex, Integer pageSize, String sortName, String sortOrder, String dateType);



    /**
     * @Description: 业绩分析报表-曲线图放入缓存
     * @Param: []
     * @Return: boolean
     * @Author: lixq-f
     * @Date: 2021/7/26
    **/
    boolean addProductAnalyseToRedis();

}
